const koa = require("koa")
const session = require('koa-session')
const body = require('koa-body')
const router = require('./router/index')
const cors = require("koa2-cors")
const mongoose = require("mongoose")
const websocket = require('koa-websocket')
mongoose.set('useFindAndModify', false)

// 实例化一个ws服务
const app = websocket(new koa())
// const app = new koa()


app.keys = ['some secret hurr']  //配合signed属性的签名key
const CONFIG = {
  key: 'koa:sess',  //cookie的key。(默认是 koa:sess)
  maxAge: 86400000,  //session 过期时间，以毫秒ms为单位计算
  httpOnly: true,  //是否设置HttpOnly，如果在Cookie中设置了"HttpOnly"属性，那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息，这样能有效的防止XSS攻击。  (默认 true)
  signed: true,  //是否签名。(默认是 true)
  rolling: true,  //是否每次响应时刷新Session的有效期。(默认是 false)
  renew: false,  // 是否在Session快过期时刷新Session的有效期。(默认是 false)
}
app.use(session(CONFIG, app))

//跨域处理
app.use(cors({
  // origin: '*',
  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
  origin: 'http://localhost:8080',    // 前端地址
  credentials: true,
  maxAge: 86400,  //这里会影响到前端会不会有option请求，如果比较大就不会有option
  allowMethods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
  allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'token']
}))

//post请求
app.use(body({
  multipart: true,
  formidable: {
    maxFieldsSize: 200 * 1024 * 1024,
    multipart: true
  }
}))

//配置路由
app.ws.use(router.routes()).use(router.allowedMethods())
app.use(router.routes()).use(router.allowedMethods())

const port = process.env.PORT || 5000

app.listen(port, () => {
  console.log(`启动成功:${port}`)
})
